#!/usr/bin/php
<?
require("functions.php");
@file_put_contents ( "/var/log/md", date("D M j G:i:s T Y")."\t0:".$argv[0]." 1:".$argv[1]." 2:".$argv[2]." 3:".$argv[3]."\n", FILE_APPEND);


// körs enbart om meddelande är för md1, dvs data
if( $argv[2] == '/dev/md1') {
	switch( $argv[1] ) {
	case 'Fail':
	case 'FailSpare':
		// läs in diskar kopplade till raid md1
		$str = @file_get_contents('/proc/mdstat');
		preg_match('/^md1 : active raid. .*(\w\w\w).\[.\]\(F\).*$/m', $str, $match);
		$faildev = $match[1];

		$str = @file_get_contents('../services/hardware/slot2dev');
		if( ($str != false) && preg_match("/^(.*) $faildev$/m", $str, $match) ) {
			$slotname = 'hd'.strval(intval($match[1]) + 1);
			sendmail("En hårddisk har slutat fungera","Hårddisken i slot ".$slotname." har blivit markerad som trasig.\nByt ut den felaktiga hårddisken. Den nya hårddisken måste aktiveras via administratörsgränsnittet under \"Hårdvara\".");
		}
		else
			sendmail("En hårddisk har slutat fungera","En hårddisk har blivit markerad som trasig.\nByt ut den felaktiga hårddisken. Den nya hårddisken måste aktiveras via administratörsgränsnittet under \"Hårdvara\".");
		break;
	case 'DegradedArray':
		sendmail("Hårddisk saknas för att ge skyddande raid","En hårddisk saknas för att ge skyddande raid. Stoppa i en ny hårddisk och aktivera den i administratörsgränsnittet under \"Hårdvara\".");
		break;
	case 'SpareActive':
	     // läser in alla aktiva diskar
		// läs in arraystat från proc
		$str = file_get_contents('/proc/mdstat');
		preg_match('/^md1 : active raid. (.*)$/m', $str, $match);
		$disks_md1 = explode(' ', $match[1]);

	     //kör grub på alla aktiva diskar
		foreach( $disks_md1 AS $disk ) {
			preg_match('/^(\w\w\w)/', $disk, $match);
			$disk = $match[1];
			$out = array();
			exec("/sbin/grub-install /dev/".$disk, $out, $ret);
			// Om fel
			if( $ret != 0 ) {
				@file_put_contents ( "/var/log/md", "FEL: kunde inte köra grub-install på ".$disk."\n", FILE_APPEND);
				sendmail("Fel när disk lades in i raid","Fel skedde när hårddisks startsektor förbereddes. Det är möjligt att det inte går att starta datorn från aktuell hårddisk.\n\nMeddelande till tekniker: fel när grub-install kördes på ".$disk);
				exit;
			}
			@file_put_contents ( "/var/log/md", "Grub-install kört på: ".$disk."\n", FILE_APPEND);
		}
		@file_put_contents ( "/var/log/md", "Aktiv: ".$argv[3]."\n", FILE_APPEND);
		break;
	}
}
?>
